import { reqLogin, reqGetUserInfo, reqGetUserDetail } from '@/api/user'
import { resetRouter } from '@/router'
import { setToken, getToken, removeToken } from '@/utils/auth'
export default {
  namespaced: true,
  state: {
    token: getToken() || '',
    userInfo: {} // 个人信息
  },
  mutations: {
    // 存储token的mutation
    setToken(state, token) {
      // 将token存储到vuex中
      state.token = token
      // 将token存储到cookie中持久化
      setToken(token)
    },
    // 设置个人信息的mutation
    setUserInfo(state, info) {
      state.userInfo = info
    },
    // 移除token
    removeToken(state) {
      state.token = '' // vuex中清除
      removeToken() // 本地清除
    },
    // 移除个人信息
    removeUserInfo(state) {
      state.userInfo = {}
    }
  },
  actions: {
    // 登录的action
    /* login({ commit }, loginForm) {
      reqLogin(loginForm).then((res) => {
        console.log(res);
        commit("setToken", res.data.data); // token
      });
    }, */
    async login({ commit }, loginForm) {
      const res = await reqLogin(loginForm)
      // console.log(res);
      commit('setToken', res.data) // token
      // return res; // 此处 return 为了让login组件接收到登录的结果, 做消息提示
    },
    // 获取个人信息的action
    async getUserInfo({ commit }) {
      const { data } = await reqGetUserInfo() // 简陋的个人信息
      const { data: data2 } = await reqGetUserDetail(data.userId) // 丰满的个人信息
      const res = { ...data, ...data2 } // res 就是合并之后的所有数据
      commit('setUserInfo', res)

      return res
    },
    // 退出的action
    logout({ commit }) {
      commit('removeToken')
      commit('removeUserInfo')

      // 重置路由规则
      // 分析: 如果退出时不重置路由, 路由规则是累加的 越加越多的!!!
      resetRouter()

      // 清除主题色信息
      // this.$store.commit('settings/resetTheme')
      // 想在某个仓库内提交另一个仓库的mutation
      // { root: true } 是第三个参数, 表示从全局出发寻找仓库
      commit('settings/resetTheme', null, { root: true })
    }
  }
}

// localStorage 和 cookie 存储
//  存储大小 localStorage 5M    cookie 4k   cookie 可以设置 httpsonly
